Fix blktap "bad page state" bug.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sun, 30 Apr 2006 08:39:04 +0000 (09:39 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sun, 30 Apr 2006 08:39:04 +0000 (09:39 +0100)
Signed-off-by: Andrew Warfield <andrew.warfield@cl.cam.ac.uk>
Signed-off-by: Ewan Mellor <ewan@xensource.com>
linux-2.6-xen-sparse/mm/memory.c

index 3482a6bcf7a02c903553928e013ea5aada6660d6..29c9095487f9ef7fd5708e4063e087284a6b52d5 100644 (file)
@@ -968,6 +968,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 {
        int i;
        unsigned int vm_flags;
+       int xenpage = 0;
 
        /* 
         * Require read or write permissions.
@@ -1025,10 +1026,14 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                if (vma && (vma->vm_flags & VM_FOREIGN)) {
                        struct page **map = vma->vm_private_data;
                        int offset = (start - vma->vm_start) >> PAGE_SHIFT;
-
+                       xenpage =1;
                        if (map[offset] != NULL) {
-                               if (pages)
-                                       pages[i] = map[offset];
+                               if (pages) {
+                                       struct page *page = map[offset];
+                                       
+                                       pages[i] = page;
+                                       get_page(page);
+                               }
                                if (vmas)
                                        vmas[i] = vma;
                                i++;